package com.fowo.api.model.payable;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fowo.api.common.excel.ChildExcelProperty;
import com.fowo.api.common.model.ImportRow;
import com.fowo.api.common.validator.*;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import javax.validation.constraints.*;
import lombok.Getter;
import lombok.Setter;

/**
 * 应付单 预览导入辅助模型(全字段为文本类型)
 * @author yl_ls
 */
@Getter
@Setter
public class PayableImportPo {

  /** 单据编号 */
  @ExcelProperty("单据编号")
  private String payCode;

  /** 供应商 */
  @ExcelProperty("*供应商")
  @NotBlank(message = "供应商不能为空")
  @Size(max = 50, message = "供应商长度不能超过50")
  private String supplierIdSupplierName;

  @ExcelIgnore
  @Schema(title = "*供应商")
  private String supplierId;

  /** 供应商名称 */
  @ExcelProperty("供应商名称")
  @Size(max = 50, message = "供应商名称长度不能超过50")
  private String supplierName;

  /** 数量 */
  @ExcelProperty("数量")
  private String totalNum;

  /** 仓库 */
  @ExcelProperty("*仓库")
  @NotBlank(message = "仓库不能为空")
  @Size(max = 50, message = "仓库长度不能超过50")
  private String warehouseName;

  @ExcelIgnore
  @Schema(title = "*仓库")
  private String warehouse;

  /** 结算组织 */
  @ExcelProperty("*结算组织")
  @NotBlank(message = "结算组织不能为空")
  @Size(max = 50, message = "结算组织长度不能超过50")
  private String settlementOrgName;

  @ExcelIgnore
  @Schema(title = "*结算组织")
  private String settlementOrg;

  /** 付款组织 */
  @ExcelProperty("付款组织")
  @Size(max = 50, message = "付款组织长度不能超过50")
  private String payOrgName;

  @ExcelIgnore
  @Schema(title = "付款组织")
  private String payOrg;

  /** 采购组织 */
  @ExcelProperty("*采购组织")
  @NotBlank(message = "采购组织不能为空")
  @Size(max = 50, message = "采购组织长度不能超过50")
  private String purchasesOrgName;

  @ExcelIgnore
  @Schema(title = "*采购组织")
  private String purchasesOrg;

  /** 入库日期 */
  @ExcelProperty("*入库日期")
  @NotBlank(message = "入库日期不能为空")
  @DateString(message = "入库日期不是有效的日期格式")
  private String businessDate;

  /** 审核日期 */
  @ExcelProperty("*审核日期")
  @NotBlank(message = "审核日期不能为空")
  @DateString(message = "审核日期不是有效的日期格式")
  private String settlementDate;

  /** 金额 */
  @ExcelProperty("金额")
  private String totalAmount;

  /** 状态 */
  @ExcelProperty("状态")
  private String stauts;

  /** 备注 */
  @ExcelProperty("备注")
  @Size(max = 500, message = "备注长度不能超过500")
  private String remarks;

  /** 驳回原因 */
  @ExcelProperty("驳回原因")
  @Size(max = 50, message = "驳回原因长度不能超过50")
  private String rejectRemark;

  /** 商品 */
  @ChildExcelProperty
  private List<ImportRow<PayableAndPayableProductImportPo>> productltem;

  /** 推送状态 */
  @ExcelProperty("推送状态")
  @EnumsString(
    value = { "未推送", "成功", "失败" },
    message = "推送状态只能是“未推送”, “成功”, “失败”中的一个"
  )
  private String pushStatus;

  /** 结果信息 */
  @ExcelProperty("结果信息")
  @Size(max = 50, message = "结果信息长度不能超过50")
  private String resultInfo;

  /** 金蝶凭证号 */
  @ExcelProperty("金蝶凭证号")
  @Size(max = 50, message = "金蝶凭证号长度不能超过50")
  private String voucherNo;

  /** 产品类型 */
  @ExcelProperty("*产品类型")
  @NotBlank(message = "产品类型不能为空")
  @EnumsString(
    value = { "原材料", "成品", "加工" },
    message = "产品类型只能是“原材料”, “成品”, “加工”中的一个"
  )
  private String productType;

  /** 制单人 */
  @ExcelProperty("制单人")
  @Size(max = 50, message = "制单人长度不能超过50")
  private String preparedByName;

  @ExcelIgnore
  @Schema(title = "制单人")
  private String preparedBy;

  /** 审核人 */
  @ExcelProperty("审核人")
  @Size(max = 50, message = "审核人长度不能超过50")
  private String verifierName;

  @ExcelIgnore
  @Schema(title = "审核人")
  private String verifier;

  /** 采购单号 */
  @ExcelProperty("采购单号")
  @Size(max = 50, message = "采购单号长度不能超过50")
  private String purchaseOrder;

  /** 入库单号 */
  @ExcelProperty("入库单号")
  @Size(max = 50, message = "入库单号长度不能超过50")
  private String warehouseSn;

  /** 结款状态 */
  @ExcelProperty("结款状态")
  @EnumsString(
    value = { "未结账", "已结账" },
    message = "结款状态只能是“未结账”, “已结账”中的一个"
  )
  private String settlementStatus;

  /** categoryId */
  @ExcelProperty("categoryId")
  @EnumsString(
    value = { "低客单价", "高客单价" },
    message = "categoryId只能是“低客单价”, “高客单价”中的一个"
  )
  private String categoryId;
}
